﻿#pragma once
#include "zyCtrol.h"
#include "zyLmageList.h"

namespace DarkMoonUI {

	class zyToolBar : public  zyCtrol
	{
	public:
		zyToolBar();
		~zyToolBar();
		
		static void  WINAPI zyToolBar_Destroy(zyObject* obj);
		static LRESULT WINAPI zyToolBar_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		static LRESULT WINAPI zyToolBar_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle);
		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		int 插入按钮(int 参数_插入位置, int 参数_按钮ID, const std::wstring& 参数_标题 = L"", int 参数_类型 = -1, int 参数_图片索引 = -1, const std::wstring& 参数_提示文本 = L"", int 参数_状态 = -1);
		bool 置缩进(int 参数_缩进距离);
		bool 绑定(HWND 参数_父窗口, int 参数_资源ID, bool 参数_使用默认字体);
		bool 绑定窗口句柄(HWND 参数_父窗口);
		int 背景图显示方式(int 参数_图片显示方式 = 0);
		int 背景色(int 参数_背景色 = 0);
		int 文本色(int 参数_文本色 = 0);
		int 取按钮数() { return (int)sendMsg(TB_BUTTONCOUNT, 0, 0); }
		int 取按钮ID(int 参数_按钮索引);
		bool 置按钮ID(int 参数_按钮索引, int 参数_按钮ID);
		int 取按钮索引(int 参数_按钮ID);
		bool 加入状态(int 参数_按钮索引, int 参数_按钮状态 = 0);
		bool 去除状态(int 参数_按钮索引, int 参数_按钮状态 = 0);
		//@备注 取回指定按钮的状态，状态值为 0 或者以下常量值任意组合(相加)： 1: 常量_选中； 2: 常量_按下； 4: 常量_禁止； 8: 常量_隐藏； 16: 常量_变灰。 可以用"位与"命令来判断指定的状态值是否被置位，如："如果真 (位与 (工具条1.取状态 (0)，常量_禁止) = 常量_禁止)"语句即可判断工具条1的第一个按钮是否已被禁止。
		int 取状态(int 参数_按钮索引);
		bool 判断状态(int 参数_按钮索引, int 参数_状态类型);
		bool 删除按钮(int 参数_按钮索引);
		std::wstring 取标题(int 参数_按钮索引);
		bool 置标题(int 参数_按钮索引, const std::wstring& 参数_标题 = L"");
		int 取类型(int 参数_按钮索引);
		bool 置类型(int 参数_按钮索引, int 参数_类型);
		//备注 取回指定按钮的图片索引，图片索引指向图片组属性中的某一图片，从 0 开始，-1 表示本按钮无图片标志。如果按钮是一个分割条则返回其宽度。
		int 取图片(int 参数_按钮索引);
		//@备注 设置指定按钮的图片索引，图片索引指向图片组属性中的某一图片，从 0 开始，-1 表示本按钮无图片标志。如果按钮是一个分割条则设置其宽度。
		bool 置图片(int 参数_按钮索引, int 参数_图片索引);
		//@备注 取得按钮的宽度和高度。
		POINT 取按钮尺寸();
		//@备注 设置按钮的宽度和高度。需要插入按钮之后才能设置
		bool 置按钮尺寸(int 参数_宽度, int 参数_高度);
		//@备注 取按钮在工具条里的矩形位置。
		RECT 取按钮矩形(int 参数_按钮索引);
		zyLmageList* 取图片组(int 参数_类型);
        void 置图片组(zyLmageList& 参数_图片组, int 参数_类型);
		void 自动大小();
		bool 置按钮数值(int 参数_按钮索引, int 参数_数值);
		int 取按钮数值(int 参数_按钮索引);
		bool 置按钮宽度(int 参数_按钮索引, int 参数_宽度);
		int 取按钮宽度(int 参数_按钮索引);
		//@备注 函数 整型 OnClick(HWND hWnd ,int id)
		void 事件_被单击(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnClick", 参数_事件指针); }
		//@备注 函数 整型 OnDropDown(HWND hWnd,整型 id,整型 X坐标,整型 Y坐标)
		void 事件_被下拉(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnDropDown", 参数_事件指针); }
		//@备注 函数 整型 OnHotItemChange(HWND hWnd,整型 旧ID,整型 新ID,整型 改变类型【工具热点改变_ 开头常量】)
		void 事件_按钮热点被改变(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnHotItemChange", 参数_事件指针); }
		//@备注 函数 整型 OnDeletingButton(HWND hWnd,整型 id)
		void 事件_按钮将被删除(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnDeletingButton", 参数_事件指针); }

	protected:
		void OnNCDestroy();
		bool zyToolbar_OnCustomDraw(HWND hwnd, HDC hdc, RECT& hrc);
	};

}

